#include <iostream>
#include <string>
#include <pthread.h>
#include <assert.h>
#include <unistd.h>
using namespace std;

// void* pthreadFun(void* args)
// {
//     pthread_detach(pthread_self());
//     cout << (char*)args << " : runing." << endl;
//     size_t count = 0;
//     while(true)
//     {
//         cout << "new thread: " << count++ << endl;
//         sleep(1);
//     }
//     cout <<"new thread quit!" << endl;
//     //pthread_exit((void*)111);
//     return (void*)666;
// }


// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,pthreadFun,(void*)"new thread");
//     cout << "main thread: create thread success." << endl;

//     sleep(6);
//     cout << "main thread: let new thread exit."<<endl;
//     pthread_cancel(tid);

//     while(true)
//     {
//         cout << "main thread still runing"<<endl;
//         sleep(1);
//     }
//     return 0;
// }



// void* pthreadFun(void* args)
// {
//     cout << (char*)args << " runing." << endl;

//     int* data = new int[5];
//     for(int i = 0; i < 5; ++i)
//     {
//         cout << "new thead: " << i << endl;
//         data[i] = i*i;
//     }
//     return (void*)data;
// }



// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,pthreadFun,(void*)"new thread");

//     int* ret = nullptr;
//     pthread_join(tid,(void**)&ret);

//     for(int i = 0; i < 5; ++i)
//     {
//         cout << ret[i] << " ";
//     }
//     delete[] ret;
//     cout << endl;
//     return 0;
// }



// void *pthreadFun(void *arg)
// {
//     cout << (char *)arg << " runing." << endl;

//     int count = 5;
//     do
//     {
//         cout << "new theard: " << count << endl;
//         sleep(1);
//     } while (count--);

//     cout << "new thread exit" << endl;
//     return (void*)233;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, pthreadFun, (void *)"new thrad");
//     cout << " create thread success" << endl;

//     void* ret = nullptr;
//     pthread_join(tid, &ret);
//     cout << "wait thread success, the ret: " << (long long)ret << endl;

//     return 0;
// }

// void* threadRun(void* arg)
// {
//     string str = (char*)arg;
//     while(true)
//     {
//         cout << str << ", pid: " << getpid() <<"\n" <<endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     pthread_t threadtid[5];
//     char threadname[64];
//     for(int i = 0; i < 5; i++)
//     {
//         snprintf(threadname,sizeof(threadname),"%s-%d","thread",i+1);
//         int ret = pthread_create(threadtid+i,nullptr,threadRun,threadname);
//         assert(ret == 0);
//         (void)ret;
//         sleep(1);
//     }

//     while(true)
//     {
//         cout << "main thread pid: " << getpid() << endl;
//         sleep(3);
//     }
//     return 0;
// }